home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / graphics / spline11 / manual.txt < prev    next >
Text File  |  1995-09-01  |  7KB  |  232 lines

  1. SPLINES.DLL Copyright (c) 1993-95 by Andrew S. Dean - All rights reserved.
  2.  
  3. SPLINES.DLL is a Windows DLL distributed as shareware.  SPLINES.DLL
  4. can be used from any Windows language or environment which supports
  5. DLL calls.  See the file REGISTER.TXT for information on registration.
  6.  
  7.  
  8.  
  9. SPLINES.DLL is a function library for creating spline curves.
  10. Several types of splines are supported (Bezier splines, B splines,
  11. Beta splines and Tau splines).  Curves can be defined in 2D
  12. or 3D.  All splines in the library are cubic splines.
  13.  
  14.  
  15. Splines are defined by interpolating between a set of distinct
  16. control points.  Both control points and the resulting curves are
  17. stored in arrays of xyzTD structures.  To create a curve, an xyzTD
  18. array of control points is passed to a spline function.  The
  19. function returns another xyzTD array filled with the interpolated
  20. points which define the curve.  Parameters can be used to control
  21. how many interpolating points are computed, and to fine-tune the
  22. shape of a curve.
  23.  
  24.  
  25. The spline points can be used to draw a curve, as a path for an
  26. animation object, as a contour for creating more complex 3D
  27. objects, and for many other applications that require smooth
  28. interpolations or transitions.
  29.  
  30.  
  31. The spline functions use the following parameters:
  32.  
  33.   Resolution   The number of interpolating points to use for each
  34.            curve segment.  The curves are composed of a number
  35.                of curve segments, each curve segment being associated
  36.                with 4 adjacent control points.  The resolution parameter
  37.            specifies the number of line intervals that will be
  38.            used to approximate a curve segment.
  39.  
  40.                The resolution parameter affects the number of curve
  41.            points as follows:
  42.  
  43.                BEZIER SPLINES:
  44.                # points on entire spline curve
  45.                        = Resolution * [( # of control points + 1) DIV 4]
  46.  
  47.                            where DIV indicates integer division
  48.                            with any fractional remainder truncated.
  49.  
  50.                            Note that Bezier splines require that the
  51.                            number of control points be of the form
  52.                              # of control points = 4 + 3*i
  53.  
  54.                B-SPLINES and TAU SPLINES:
  55.                # points on entire spline curve
  56.                        = Resolution * ( # of control points - 1 )
  57.  
  58.                BETA SPLINES:
  59.                # points on entire spline curve
  60.                        = Resolution * ( # of control points - 3 ) -1
  61.  
  62.                For example, a B spline with 4 control points and
  63.                resolution of 5 will have 3 curve segments, for a
  64.                total of 15 points on the curve.
  65.  
  66.  
  67.   Bias         Spline segments are controlled by a window of 4
  68.            control points.  Bias affects which control points
  69.            exert the most influence on the curve.  Different
  70.            types of splines use the bias parameters in different
  71.            ways.  The SplinApp.EXE program can be used to
  72.                demonstrate the effect of the bias parameter on
  73.                different curves.
  74.  
  75.  
  76.   Tension      The tension parameter affects how close the
  77.                spline curve is to its control polygon.  Increasing
  78.                the tension parameter will pull the curve closer to
  79.                the control polygon.
  80.  
  81.   Curve[]      The array of spline points filled in by the spline
  82.            function.  This is passed as a buffer to the spline
  83.            function, so it is up to the programmer to make sure
  84.            the array is big enough.
  85.  
  86.   Control[]    The array of control points used by the spline
  87.            function to compute the interpolating spline points.
  88.            This is referred to as the control polygon.
  89.  
  90.   NumControl   The integer number of control points in the
  91.                control polygon.
  92.  
  93.  
  94.  
  95. All the spline functions return the number of spline points computed.
  96.  
  97.  
  98.  
  99.  
  100. Splines can be defined in both 2D and 3D.  If you just need to work
  101. with 2D points, simply set the the Z component of each point to
  102. zero.
  103.  
  104.  
  105.  
  106. Support for using SPLINES.DLL with Visual Basic is distributed as
  107. the file SPLINES.BAS, which contains the necessary Type definitions
  108. and Declare statements.
  109.  
  110. Support for using SPLINES.DLL with C/C++ is provided through the
  111. files SPLINES.H and SPLINES.LIB.
  112.  
  113. SPLINES.DLL was compiled with Microsoft Visual C++.
  114.  
  115.  
  116.  
  117.  
  118. The following examples, in C and Visual Basic, create a control
  119. polygon of 4 points, and then create an interpolating B spline
  120. curve with 16 points.
  121.  
  122.  
  123.  
  124.  
  125.  
  126. C Example
  127.  
  128.   xyz_td Control[4];
  129.   xyz_td Curve[16];
  130.  
  131.   long lNumControls;
  132.   long lNumPoints;
  133.  
  134.  
  135.   Control[0].x =  0.0;
  136.   Control[0].y =  0.0;
  137.   Control[0].z =  0.0;
  138.  
  139.   Control[1].x = 10.0;
  140.   Control[1].y = 10.0;
  141.   Control[1].z =  0.0;
  142.  
  143.   Control[2].x = 20.0;
  144.   Control[2].y = 10.0;
  145.   Control[2].z =  0.0;
  146.  
  147.   Control[3].x = 30.0;
  148.   Control[3].y =  0.0;
  149.   Control[3].z =  0.0;
  150.  
  151.   /* Create a normal Bspline (tension = 1.0) */
  152.  
  153.   lNumPoints = Bspline(5, 1.0, 4, Control, Curve );
  154.  
  155.  
  156.   /* The Curve is now been filled with the points:
  157.      i   Curve[i].x    Curve[i].y    Curve[i].z
  158.  
  159.      0      0            0               0
  160.      1      2            1.98            0
  161.      2      4            3.89            0
  162.      3      6            5.64            0
  163.      4      8            7.15            0
  164.      5     10            8.33            0
  165.      6     12            9.13            0
  166.      7     14            9.53            0
  167.      8     16            9.53            0
  168.      9     18            9.13            0
  169.     10     20            8.33            0
  170.     11     22            7.15            0
  171.     12     24            5.64            0
  172.     13     26            3.89            0
  173.     14     28            1.99            0
  174.     15     30            0               0
  175.  
  176.   */
  177.  
  178.  
  179.  
  180. VB Example
  181. ----------
  182.  
  183.   Dim xyzTD        As Control[4]
  184.   Dim xyzTD        As Curve[16]
  185.  
  186.   Dim lNumControls As Long
  187.   Dim lNumPoints   As Long
  188.  
  189.  
  190.   Control(0).fX =  0.0
  191.   Control(0).fY =  0.0
  192.   Control(0).fZ =  0.0
  193.  
  194.   Control(1).fX = 10.0
  195.   Control(1).fY = 10.0
  196.   Control(1).fZ =  0.0
  197.  
  198.   Control(2).fX = 20.0
  199.   Control(2).fY = 10.0
  200.   Control(2).fZ =  0.0
  201.  
  202.   Control(3).fX = 30.0
  203.   Control(3).fY =  0.0
  204.   Control(3).fZ =  0.0
  205.  
  206.   ' Create a normal Bspline (tension = 1.0)
  207.  
  208.   lNumPoints = Bspline(5, 1.0, 4, Control(0), Curve(0))
  209.  
  210.  
  211.   ' The Curve is now been filled with the points:
  212.   '   i   Curve(i).x    Curve(i).y    Curve(i).z
  213.   '
  214.   '   0      0            0               0
  215.   '   1      2            1.98            0
  216.   '   2      4            3.89            0
  217.   '   3      6            5.64            0
  218.   '   4      8            7.15            0
  219.   '   5     10            8.33            0
  220.   '   6     12            9.13            0
  221.   '   7     14            9.53            0
  222.   '   8     16            9.53            0
  223.   '   9     18            9.13            0
  224.   '  10     20            8.33            0
  225.   '  11     22            7.15            0
  226.   '  12     24            5.64            0
  227.   '  13     26            3.89            0
  228.   '  14     28            1.99            0
  229.   '  15     30            0               0
  230.   '
  231.   '
  232.